<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script type="text/javascript">

    /**
     * 没有任何参数，也不存在返回值
     *
     * 特点：1. 首字母大写
     * @constructor
     */
    function People() {

    }

    /*
    * 如果是普通函数直接调用即可。但是如果一个函数是用来产生对象的，那么在调用的时候，需要在函数前面加上一个 new 关键字，通过 new 关键字调用的函数会返回一个对象。然后我们需要使用一个变量接收
    *
    * 如果一个函数是需要通过 new 方式调用，用于产生对象，那么该函数我们称之为 构造函数。特点是
    * 1. 首字母大写
    * 2. 该函数不存在返回值
    * 3. 我们稍后可以定义属性和方法
    *
    * 注意：如果一个对象不存在属性和方法，那么该对象我们叫做空对象。
    *
    * */

    var p1 = new People();

    console.log(p1);
    console.log(typeof p1);

    /*
    * 方式一：给空对象增加属性和方法
    * */
    p1.username = 'liyang';
    p1.run = function () {
        console.log(this.username, ' 在奔跑！');
    }

    console.log(p1);

    // 属性的获取和方法调用
    console.log(p1.username);
    p1.run();


    console.log('在产生一个对象');
    /*在产生一个对象*/
    var p2 = new People();
    console.log(p2, 'p2');

    p2.username = 'mark';
    p2.run = function () {
        console.log(this.username, ' 在奔跑！');
    }
    console.log(p2.username);
    p2.run();


</script>

</html>
